/** 这里是实现的babel插件。注意格式（一个函数，返回对象，对象包含visitor）
 * api: 提供了一些api，不需要再引入了
 */
const generate = require("@babel/generator").default;
const targetCalleeName = ['log', 'info', 'error', 'debug'].map(item => `console.${item}`);
module.exports = function(api, options) {
  return {
    // 访问者模式
    visitor: {
      CallExpression(path, state) {
        if(path.node.isNew) {
          return;
        }
        const calleeName = generate(path.node.callee).code;
        if (targetCalleeName.includes(calleeName)) {
          const { line, column } = path.node.loc.start;
          const newNode = api.template.expression(`console.log("${state.filename || 'unkown filename'}: (${line}, ${column})")`)();
          newNode.isNew = true;
          if (path.findParent(path => path.isJSXElement())) {
            path.replaceWith(api.types.arrayExpression([newNode, path.node]))
            path.skip();
          } else {
            path.insertBefore(newNode);
          }
        }
      },
    }
  }
}
